/**
 * 实例成员和原型成员通过实例对象访问
 * 静态成员通过构造函数（类）访问
 */
function Fn() {
  // 实例成员
  this.instanceAttr = 'instanceAttr'
}
// 静态成员
Fn.staticAttr = 'staticAttr'
// 原型成员
Fn.prototype.prototypeAttr = 'prototypeAttr'

var fn = new Fn()
console.log(fn.instanceAttr)
console.log(Fn.instanceAttr) // undefined
console.log(fn.staticAttr) // undefined
console.log(Fn.staticAttr)
console.log(fn.prototypeAttr)
console.log(Fn.prototypeAttr) // undefined

// ES6 >>>
class Fn2 {
  constructor() {
    // 实例成员
    this.instanceAttr = 'instanceAttr'
  }

  // 实例成员
  instanceAttr2 = 'instanceAttr2'

  // 静态成员
  static staticAttr = 'staticAttr'
}
Fn2.prototype.prototypeAttr = 'prototypeAttr'

const fn2 = new Fn2()
console.log(fn2.instanceAttr)
console.log(Fn2.instanceAttr) // undefined
console.log(fn2.instanceAttr2)
console.log(Fn2.instanceAttr2) // undefined
console.log(fn2.staticAttr) // undefined
console.log(Fn2.staticAttr)
console.log(fn2.prototypeAttr)
console.log(Fn2.prototypeAttr) // undefined
// ES6 <<<
